package com.wjm.api.BufferedStream;

import java.io.*;

/**
 * Data:2022年07月09日
 * Author:wjm
 * Content: 字节流缓冲流
 *
 *
 *  缓冲流都是高级流，所以操作的就是基础流，不能直接操作硬件设备或节点数据
 *
 *
 *  字节流缓冲流分为两种
 *               1）BufferedOutputStream（输出流缓冲流）
 *               1）BufferedInputStream（输入流缓冲流）
 *
 *
 *  BufferedOutputStream（输出流缓冲流）的注意点：
 *               1）缓冲区的默认大小是8192字节，也可以在创建缓冲流对象时自定义
 *               2）没有关闭流连接，缓冲区的数据是不能够被写出去的，因为没有满，所以想将缓冲区的数据写出的时候要么调用flush方法将缓冲区数据刷新出去，
 *                 要么关闭流连接，这样的好处是释放了资源的同时也将缓冲区数据刷新出去。
 *
 *
 *
 */
public class BufferedStreamDemo {
    public static void main(String[] args) throws IOException {
        //输出缓冲流
        outputMethod();
        System.out.println("-------------------");
        //输入缓冲流
        inputMethod();


    }

    private static void inputMethod() throws IOException {
        //创建读取输入流对象
        FileInputStream fis = new FileInputStream("d.txt");
        //创建读取输入流的缓冲流对象
        BufferedInputStream bis = new BufferedInputStream(fis);
        //声明结尾标识
        int len;
        //读取数据
        while ((len = bis.read()) != -1){
            System.out.print((char)len);
        }
        //关闭流连接
        bis.close();
    }

    private static void outputMethod() throws IOException {
        //创建写出的输出流对象
        FileOutputStream fos = new FileOutputStream("d.txt");
        //创建输出流的缓冲流对象
        BufferedOutputStream bos = new BufferedOutputStream(fos);//默认的容量是8192，也可以自己定义
        //写入数据
        bos.write("java hellow!".getBytes());
        /*
        * 注意：没有关闭流连接，缓冲区的数据是不能够被写出去的，因为没有满
        *      所以想将缓冲区的数据写出的时候要么调用flush方法将缓冲区数据刷新出去，
        *      要么关闭流连接，这样的好处是释放了资源的同时也将缓冲区数据刷新出去。
        * */
        bos.flush();

        bos.write("wjm".getBytes());

        //关闭流连接
        bos.close();
    }
}
